8276

41 分钟

#C 语言标准库头文件 string.h

这个头文件提供 字符串操作 的相关功能。例如字符串拼接,字符串裁剪,字符串搜索等。

#函数

函数标准说明
strlenC89获取字符串长度
strcpyC89复制字符串
strncpyC89复制字符串,不超过指定长度
strcatC89拼接字符串
strncatC89拼接字符串,不超过指定长度
strcmpC89比较字符串
strncmpC89比较字符串,不超过指定长度
strdupC23分配内存并复制字符串
strndupC23分配内存并复制字符串,不超过指定长度
strxfrmC89按照语言环境转换字符串
strcollC89按照语言环境比较字符串
strchrC89在字符串中查找某个字符第一次出现的位置
strrchrC89在字符串中查找某个字符最后一次出现的位置
strstrC89在字符串中查找某个子串第一次出现的位置
strspnC89计算字符串完全由指定字符集合中的字符组成的前缀的长度
strcspnC89计算字符串不包含指定字符集合中的字符的前缀的长度
strpbrkC89在字符串中查找某个字符集合中的字符首次出现的位置
strtokC89将字符串按照指定子串分割,返回下一个 token
memchrC89在内存块中查找字符
memcmpC89内存块比较
memsetC89用指定的值填满内存块
memcpyC89复制内存块,不可重叠
memmoveC89复制内存块,可以重叠
strerrorC89获取错误码的文本说明
安全函数标准说明
strcpy_sC11复制字符串
strncpy_sC11复制字符串,不超过指定长度
strcat_sC11拼接字符串
strncat_sC11拼接字符串,不超过指定长度
strtok_sC11将字符串按照指定字串分割,返回下一个 token
memset_sC11用指定的值填满内存块
memcpy_sC11复制内存块,不可重叠
memmove_sC11移动内存块,可以重叠
strerror_sC11获取错误码的文本说明
strerrorlen_sC11获取错误码的文本说明的长度
其它函数标准说明
memset_explicitC23用指定的值填满内存块,不会因编译器优化而被省略

#推荐阅读

#示例

#include <stdio.h> #include <string.h> // 包含字符串操作函数 int main(void) { // 1. strlen - 获取字符串长度 char str1[] = "Hello, World!"; printf("1. strlen(\"%s\") = %lu\n", str1, strlen(str1)); // 2. strcpy - 字符串复制 char dest[50]; strcpy(dest, str1); printf("2. strcpy: %s\n", dest); // 3. strncpy - 安全字符串复制 char dest2[10]; strncpy(dest2, str1, sizeof(dest2)-1); dest2[sizeof(dest2)-1] = '\0'; // 确保以null结尾 printf("3. strncpy: %s\n", dest2); // 4. strcat - 字符串连接 char str2[50] = "Welcome "; strcat(str2, "to C programming!"); printf("4. strcat: %s\n", str2); // 5. strncat - 安全字符串连接 char str3[20] = "Hello"; strncat(str3, " World!!!", 6); // 只连接前6个字符 printf("5. strncat: %s\n", str3); // 6. strcmp - 字符串比较 char str4[] = "apple"; char str5[] = "banana"; int result = strcmp(str4, str5); printf("6. strcmp(\"%s\", \"%s\") = %d\n", str4, str5, result); // 7. strncmp - 比较前n个字符 result = strncmp("abc123", "abc456", 3); printf("7. strncmp(\"abc123\", \"abc456\", 3) = %d\n", result); // 8. strchr - 查找字符首次出现位置 char *ptr = strchr(str1, 'W'); printf("8. strchr(\"%s\", 'W') found at position: %ld\n", str1, ptr - str1); // 9. strstr - 查找子字符串 ptr = strstr("This is a test", "is"); printf("9. strstr(\"This is a test\", \"is\") found at position: %ld\n", ptr - "This is a test"); // 10. memset - 内存设置 char buffer[10]; memset(buffer, 'A', sizeof(buffer)-1); buffer[sizeof(buffer)-1] = '\0'; printf("10. memset: %s\n", buffer); // 11. memcpy - 内存复制 char src[] = "Memory copy"; char dest3[20]; memcpy(dest3, src, strlen(src)+1); printf("11. memcpy: %s\n", dest3); // 12. memcmp - 内存比较 int arr1[] = {1, 2, 3}; int arr2[] = {1, 2, 4}; result = memcmp(arr1, arr2, sizeof(arr1)); printf("12. memcmp(arr1, arr2) = %d\n", result); return 0; }

运行结果:

1. strlen("Hello, World!") = 13 2. strcpy: Hello, World! 3. strncpy: Hello, Wo 4. strcat: Welcome to C programming! 5. strncat: Hello World 6. strcmp("apple", "banana") = -1 7. strncmp("abc123", "abc456", 3) = 0 8. strchr("Hello, World!", 'W') found at position: 7 9. strstr("This is a test", "is") found at position: 2 10. memset: AAAAAAAAA 11. memcpy: Memory copy 12. memcmp(arr1, arr2) = -1

创建于 2025/7/6

更新于 2025/7/12